Computers have become integral tools used in a wide variety of different applications, such as in finance and commercial transactions, computer-aided design and manufacturing, health care, telecommunication, education, etc. Computers are finding new applications as a result of advances in hardware technology and rapid development in software technology. Furthermore, the functionality of a computer system is dramatically enhanced by coupling these types of stand-alone devices together in order to form a networking environment. Within a networking environment, users may readily exchange files, share information stored on a common database, pool resources, and communicate via electronic mail (e-mail) and video teleconferencing. Furthermore, computers which are coupled to a networking environment like the Internet provide their users access to data and information from all over the world.
The software applications that operate on computer systems may be implemented in many different ways. For example, a programming language such as the Java™ 2 Platform, Enterprise Edition (J2EE™) developed by Sun Microsystems may be utilized in order to create useable software applications. Within J2EE there are distributed objects which are referred to as Enterprise JavaBeans™ (EJB™). It should be appreciated that a software application can include multiple Enterprise JavaBeans. As such, as part of a transaction, one Enterprise JavaBean (or distributed object) of a software application can invoke or call another Enterprise JavaBean within the same or another application. Furthermore, the called Enterprise JavaBean (or object) can then call or invoke a third Enterprise JavaBean and so on: Additionally, the third Enterprise JavaBean may subsequently return a value to the second Enterprise JavaBean. Consequently, the second Enterprise JavaBean may then do some computations with the received value in order to provide a value to the first Enterprise JavaBean. It should be understood that this transaction may have been initiated by a call issued by a client computer to the software application operating on a server.
There are those individuals and/or companies who are interested in improving or optimizing the performance of software applications. For example, by understanding where the most time is being spent during a transaction of a software application, a determination may be made of how to optimize or improve the transaction. Therefore, efforts are made to determine the elapsed time it takes to complete a software transaction along with determining how much time each distributed object of the transaction takes. In this manner, the object(s) that takes the most amount of time may be targeted for optimization. However, there are obstacles associated with measuring the completion time of each distributed object of a software transaction.
For example, one of the obstacles is that the source code of a software application may not be available to the company and/or individual trying to evaluate the performance of the application objects. Instead, the evaluating company and/or individual has access to the compiled version of the application. As such, the typical solution in this situation is to utilize proxy objects (or monitor objects) that work with the compiled software application. Specifically, for each object of a desired transaction, a proxy object is created that is associated with that object of the compiled application. The desired function of each proxy object is to measure the amount of time spent by its corresponding object during the transaction.
Specifically, a call to an object first goes through the proxy object before going to the desired object. So when a client makes a call to a transaction operating on a server, the call first goes through a proxy object associated with the first object of the transaction. Additionally, when the first object makes a call to a second object of the transaction, the call passes through the proxy object associated with the second object. As such, the proxy object provides some type of time measurement associated with the object of the transaction.
Depending on the software application, there are different choices for the implementation of such proxy objects. For example, the software application itself provides support for being instrumented. In this case, the proxy object may be registered with the software application and is executed within the application process. Alternatively, the software application itself provides no support for being instrumented. In this case, proxies being used to intercept the communication between distributed objects usually involves another computer program and increases the communication overhead.
However, there are disadvantages associated with both proxy object solutions. For example, one of the disadvantages associated with the first solution is that most applications do not support this approach. Hence, this first solution typically cannot be used with most applications. Another disadvantage associated with the first solution is that it usually involves coming up with a different solution for each application since each application commonly provides a different programmer's interface, e.g., API (application programming interface).
One of the disadvantages associated with the second solution is that it involves another computer program that intercepts the communication and forwards it to the subsequent object. Therefore, it introduces one more level of processing thereby adversely affecting the accuracy of the time measurements. In other words, the measurements of the elapsed time of each object within a transaction are offset by the overhead introduction by the proxy objects.
Another disadvantage associated with the second solution is that the protocol used by the client and server to exchange messages usually needs to be well understood by those desiring to measure the performance of the software application. Otherwise, it can be very difficult to implement the proxy object solution.
Accordingly, a need exists for a way to more accurately measure the amount of time spent by a distributed object during a transaction when the source code of a software application is not available and if the application does not support the registration of proxy objects to be executed within the application. A further need exists for a way that satisfies the above mentioned need and can be implemented even if the client/server protocol for exchanging messages is not well understood.